home *** CD-ROM | disk | FTP | other *** search
- ⓪ MODULE TimerA;⓪ (*$Z+,R-*)⓪ ⓪ (*⓪!* Der MFP ist mit 2.4576 MHz getaktet.⓪!* Da "bitTime" 4.34µs ist und das kleinste benötigte Delay 1.5*bitTime,⓪!* ergibt das genau 16 Timer-Zyklen. Diese sind über einen Teiler von 4⓪!* oder 16 zu erreichen.⓪!*)⓪ ⓪ (*$E MOS *) IMPORT TOSIO; FROM InOut IMPORT Write, WriteCard;⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER;⓪ FROM GEMDOS IMPORT Super;⓪ ⓪ ⓪ PROCEDURE Delay1Bit;⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(; Delay: 1.5 * bitTime (6.51µs) = 16 Zyklen⓪(MOVEA.W #$FA00,A0⓪(MOVE.B #$DF,$0B(A0) ; IPRA: Clear Timer-A Pending Bit⓪(MOVE.B #4,$1F(A0) ; TADR: Set Timer Count⓪(MOVE.B #1,$19(A0) ; TACR: Timer Start (Teiler: 1/4)⓪%l: BTST #5,$0B(A0) ; IPRA⓪(BEQ l⓪(MOVE.B #$00,$19(A0) ; TACR: Timer Stop⓪$END⓪"END Delay1Bit;⓪"(*$L=*)⓪ ⓪ PROCEDURE Delay1Byte;⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(; Delay: 1.5 * byteTime (39µs) = 58 Zyklen⓪(MOVEA.W #$FA00,A0⓪(MOVE.B #$DF,$0B(A0) ; IPRA: Clear Timer-A Pending Bit⓪(MOVE.B #35,$1F(A0) ; TADR: Set Timer Count⓪(MOVE.B #1,$19(A0) ; TACR: Timer Start (Teiler: 1/4)⓪%l: BTST #5,$0B(A0) ; IPRA⓪(BEQ l⓪(MOVE.B #$00,$19(A0) ; TACR: Timer Stop⓪$END⓪"END Delay1Byte;⓪"(*$L=*)⓪ ⓪ PROCEDURE DelayBytes (n: CARDINAL);⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(; Delay: n * 1.5 * byteTime (39µs) = n * 58.5 Zyklen⓪(MOVE.W -(A3),D0 ; n⓪(MOVEA.W #$FA00,A0⓪(MOVE.B #$DF,$0B(A0) ; IPRA: Clear Timer-A Pending Bit⓪(MOVE.B #36,$1F(A0) ; TADR: Set Timer Count⓪(MOVE.B #1,$19(A0) ; TACR: Timer Start (Teiler: 1/4)⓪(BRA s⓪%l: BTST #5,$0B(A0) ; IPRA⓪(BEQ l⓪(MOVE.B #$DF,$0B(A0) ; IPRA: Clear Timer-A Pending Bit⓪%s: DBRA D0,l⓪(MOVE.B #$00,$19(A0) ; TACR: Timer Stop⓪$END⓪"END DelayBytes;⓪"(*$L=*)⓪ ⓪ PROCEDURE Delay (teiler, count: CARDINAL);⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(MOVEA.W #$FA00,A0⓪(MOVE.B #$DF,$0B(A0) ; IPRA: Clear Timer-A Pending Bit⓪(MOVE.W -(A3),D0⓪(MOVE.W -(A3),D1⓪(MOVE.B D0,$1F(A0) ; TADR: Set Timer Count⓪(MOVE.B D1,$19(A0) ; TACR: Timer Start⓪%l: BTST #5,$0B(A0) ; IPRA⓪(BEQ l⓪(MOVE.B #$00,$19(A0) ; TACR: Timer Stop⓪$END⓪"END Delay;⓪"(*$L=*)⓪ ⓪ PROCEDURE Start (teiler, count: CARDINAL);⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(MOVEA.W #$FA00,A0⓪(MOVE.B #$DF,$0B(A0) ; IPRA: Clear Timer-A Pending Bit⓪(MOVE.W -(A3),D0⓪(MOVE.W -(A3),D1⓪(MOVE.B D0,$1F(A0) ; TADR: Set Timer Count⓪(MOVE.B D1,$19(A0) ; TACR: Timer Start⓪%l: END⓪"END Start;⓪"(*$L=*)⓪ ⓪ PROCEDURE Stop;⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(MOVE.B #$00,$FFFA19 ; TACR: Timer Stop⓪$END⓪"END Stop;⓪"(*$L=*)⓪ ⓪ PROCEDURE Down (): BOOLEAN;⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(BTST #5,$FFFA0B ; IPRA⓪(BEQ no⓪(BCLR #5,$FFFA0B ; IPRA: Clear Timer-A Pending Bit⓪(MOVEQ #1,D0⓪(RTS⓪$no: CLR D0⓪$END⓪"END Down;⓪"(*$L=*)⓪ ⓪ (* nur mit dieser optimierten Schleife sind auf dem Mega STE die⓪!* 1.5*bitTime zu messen:⓪"Start (1,4);⓪"ASSEMBLER⓪(MOVE.L n,D1⓪(MOVE.L l,D0⓪(MOVEQ #5,D2⓪(LEA $FFFA0B,A0⓪$lo: BTST D2,(A0) ; IPRA⓪(BEQ lo⓪(BCLR D2,(A0) ; IPRA: Clear Timer-A Pending Bit⓪(ADDQ.L #1,D1⓪(CMP.L hz200,D0⓪(BHI lo⓪(MOVE.L D1,n⓪"END;⓪ *)⓪ ⓪ PROCEDURE Init;⓪"(*$L-*)⓪"BEGIN⓪$ASSEMBLER⓪(MOVEA.W #$FA00,A0⓪(MOVE.B #$00,$19(A0) ; TACR: Timer Stop⓪(ANDI.B #$DF,$13(A0) ; IMRA: Mask Timer A IR⓪(ORI.B #$20,$07(A0) ; IERA: Enable Timer-A Pending Bit⓪(MOVE.B #$DF,$0B(A0) ; IPRA: Clear Timer-A Pending Bit⓪$END⓪"END Init;⓪ ⓪ VAR n, l, hz200[$4BA]: LONGCARD;⓪$sr: CARDINAL;⓪$ssp: LONGINT;⓪ ⓪ BEGIN⓪"ssp:= Super (0);⓪"Init;⓪"n:= 0;⓪"ASSEMBLER MOVE SR,sr MOVE #$2500,SR END;⓪"l:= hz200 + 200; (* 1s *)⓪"(*⓪"Start (1,4);⓪"REPEAT⓪$IF Down () THEN⓪&INC (n);⓪$END;⓪"UNTIL hz200 >= l;⓪"*)⓪"Stop;⓪"ASSEMBLER MOVE sr,SR END;⓪"WriteCard (n, 0);⓪"ssp:= Super (ssp)⓪ END TimerA.⓪ ə
- (* $FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0Ç$00000DF3T.......T.......T.......T.......TT......T.......T.......T.......T.......T.......$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$FFF006F0$00000EC0$FFF006F0$00000DF3$FFF006F0$FFF006F0$FFF006F0œÇé*)
-